package com.xpec.c4.service.utility;


public class GenSN {

	/**
	 * 
	 */
	public final static int MAX_VALUE = 10000;
	
	/**
	 * 
	 * @param v1
	 * @param v2
	 * @param v3
	 * @return
	 */
	public static String genSerialNumber(int v1, int v2, int v3){
		
		char charMap[] = { 'P', 'B', 'F', 'E', 'C', 'H', 'S', 'M', 'A', 'K',
				'R', 'X', 'T', 'E', 'A', 'C', 'Z', 'Y', 'S', 'E', 'K', 'P',
				'M', 'W' };

		int val4 = v1 * v2 + v3;
		
		int va1 = Math.abs(((v1 * v3 * 7)) % charMap.length); 
		int va2 = Math.abs((((v2 + v3) * 13)) % charMap.length);
		int va3 = Math.abs(((val4 * (v3 + va2))) % charMap.length);
		int va4 = Math.abs((val4 % charMap.length));
		
		String s = new StringBuilder().append(charMap[va1]).append(charMap[va2])
				.append(charMap[va3]).append(charMap[va4]).toString();
		
		// String str = String.format("%04d-%04d-%04d-%s", v1, v2, v3, s);		
		String str = String.format("%04d%04d%04d%s", v1, v2, v3, s);
		
		return str;
	}
	
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		
		int MAX_VALUE = 10000;
		int a1 = 1217;
		int a2 = 925;
		int a3 = 9861;
		
		int c = 0;
		for (int k = a1; k < MAX_VALUE; k++) {
			for (int j = a2; j < MAX_VALUE; j++) {
				for (int i = a3; i < MAX_VALUE; i++) {
					c++;
					System.out.println(c + ": " + genSerialNumber(k, j, i));

					if (c > 300) {
						j = MAX_VALUE;
						k = MAX_VALUE;
						break;
					}
				}
				// 歸零
				a3 = 0;
			}
			// 歸零
			a2 = 0;
		}
		
	}

}
